TMultiReadExclusiveWriteSynchronizer a deadlock

Otázka od: Milan Hora

8. 10. 2002 9:48

Ahoj,

pouziva nekdo pro synchronizaci pristupu k objektu z vice vlaken
TMultiReadExclusiveWriteSynchronizer? Pokud pouziji nasledujici konstrukci
tak dojde k deadlocku.

mrw: TMultiReadExclusiveWriteSynchronizer;

...

{ThreadA}
  mrw.BeginRead;
  try

    // zde se pracuje se sdilenym objektem
    //pokud se v tomto miste zacne vykonavat kod vlakna B, pak nasledne
dojde k deadlocku

    mrw.BeginWrite;
    try

    // zde se pracuje se sdilenym objektem

    finally
      mrw.EndWrite;
    end;
  finally
    mrw.EndRead;
  end;

{ThreadB}
  mrw.BeginWrite;
  try

      // zde se pracuje se sdilenym objektem
  finally
    mrw.EndWrite;
  end;


Pokud nahradim TMultiReadExclusiveWriteSynchronizer objektem
TJclMultiReadExclusiveWrite z JCL, tak vse funguje bez problemu. Delam neco
spatne nebo muze jit o chybu Delphi? Pokud by mel nekdo zajem, tak mohu
poslat i jednoduchy projekt na demonstraci problemu.

D5, W2K

Milan

Odpovedá: Petr Vones

8. 10. 2002 17:52

From: "Milan Hora" <ivar@ivar.cz>
> Delam neco spatne nebo muze jit o chybu Delphi?

Tusim ze tam bylo prave nejake omezeni, ze jsi nemohl vnorovat Read a Write
nebo tak nejak.

> Pokud by mel nekdo zajem, tak mohu poslat i jednoduchy projekt na
> demonstraci problemu.

Dobre, zkusim to v D6 a 7.

Petr Vones